<?php


class Cms_Model_Containers extends WSB_Db_Rowset
{

	/**
	 * Alle Container fuer eine bestimme Sprache und einen bestimmten Platzhalter zurueckgeben.
	 * Es wird ein Array von Containerobjekten zurueckgegeben.
	 *
	 * @param integer $idLanguage
	 * @param integer $idPlaceholder
	 * @return array
	 */
    public function getContainers($idLanguage, $idPlaceholder)
	{
    	$containers = array();
    	foreach($this AS $c) {
    		if(($c->language_id == $idLanguage) && ($c->placeholder_id == $idPlaceholder)) {
    			$containers[$c->id] = $c;
    		}
    	}
    	return array_values($containers);
    }

    /**
     * Alle Container fuer eine bestimmte Sprache zurueckgeben, die keinem Platzhalter in $placeholders zugeordnet sind.
     *
     * @param integer $idLanguage
     * @param Cms_Model_Placeholders $placeholders
     * @return array
     */
    public function getUnassignedContainers($idLanguage, Cms_Model_Placeholders $placeholders)
	{
    	$containers = array();
    	foreach($this AS $c) {
    		if(($c->language_id == $idLanguage)) {
    			$isInArray = false;
    			foreach($placeholders AS $p) {
    				if($c->placeholder_id == $p->id) {
    					$isInArray = true;
    					break;
    				}
    			}
    			if(!$isInArray) {
    				$containers[$c->id] = $c;
    			}
    		}
    	}
    	return array_values($containers);
    }

    /**
     * Alle Platzhalter IDs fuer eine bestimmte Sprache zureckgeben.
     *
     * @param integer $idLanguage
     * @return array
     */
    public function getPlaceholderIds($idLanguage)
	{
    	$ids = array();
    	foreach($this AS $c) {
    		if($c->language_id == $idLanguage) {
    			$ids[$c->placeholder_id] = $c->placeholder_id;
    		}
    	}
    	return array_values($ids);
    }

    /**
     * Container sortieren und anschliessend im internen Array speichern.
     * Die Sortierung wird durch die Rootpage IDs definiert.
     *
     * @param array $rootpageIds
     */
    public function reorder(array $rootpageIds)
	{

    	$rootpageIds = array_reverse($rootpageIds);

    	// Rekursive Container in temp. Array speichern
    	$temp = array();
		foreach($this->_data AS $index=>$data) {
			if(!empty($data['recursive'])) {
				$temp[$data['page_id']][] = $data;
				unset($this->_data[$index]);
			}
		}

		// Rekursive Container sortieren:
		// Die Rootpage IDs definieren die Sortierung.
		$recursiveArray = array();
		foreach($rootpageIds AS $pageId) {
			if(isset($temp[$pageId])) {
				$recursiveArray = array_merge($recursiveArray, $temp[$pageId]);
			}
		}

		// Rekursive Container vor die "normalen" Container setzen
		if(count($recursiveArray) > 0) {
			$this->_data = array_merge($recursiveArray, $this->_data);
		}

		$this->_count = count($this->_data);

    }

}